home *** CD-ROM | disk | FTP | other *** search
- {
- >thanks for the example -- do you have any idea how to read the whole
- >palette at one time, etc?
-
- Here you go... It will work on all computers. I do not use the 286
- string instructions, as they go too fast for some VL-Bus video cards causing
- incorrect colours. The first part waits for a full vertical retrace
- before changing the colours to prevent "snow" at the top of the display on
- slower computers. The only time you'll see the snow is if you continuously
- get or set the palette such as in a screen fade.
- }
-
- Procedure VGAGetPalette(Pal:Pointer); Assembler;
- Asm
- { Wait for Vertical Retrace }
- MOV DX,3DAh
- @@WaitNotVSync:
- IN AL,DX
- (91 min left), (H)elp, More? AND AL,00001000b
- JNZ @@WaitNotVSync
- @@WaitVSync:
- IN AL,DX
- AND AL,00001000b
- JZ @@WaitVSync
-
- LES DI,[Pal] {;ES:DI:=Palette Pointer }
- XOR AX,AX {;Start with DAC 0 }
- MOV CX,256 {;End with DAC 255 }
- MOV DX,3C7h {; |Send Starting DAC register }
- OUT DX,AL {;/ }
- INC DX {; |DX:=DAC Data register }
- INC DX {;/ }
- CLD
- @@DACLoop:
- IN AL,DX {;Read Red Byte }
- STOSB {;Store Red Byte }
- IN AL,DX {;Read Green Byte }
- STOSB {;Store Green Byte }
- IN AL,DX {;Read Blue Byte }
- STOSB {;Store Blue Byte }
- LOOP @@DACLoop {;Loop until CX=0 }
- End;
-